package com.cy3;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 7.31java作业
 *
 * @author xxx
 * @date 2022/07/31 14:40
 **/
public class HomeWork {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 递归求 N 的阶乘
        // int i = sc.nextInt();
        // System.out.println(factorial(i));
        // 递归求和
        // int i = sc.nextInt();
        // System.out.println(sum(i));
        // 递归打印数字的每一位
        // int i = sc.nextInt();
        // printEveryBit(i);
        // 返回的数字之和
        // int i = sc.nextInt();
        // System.out.println(sumOfConstituentNumbers(i));
        // 递归求斐波那契数列的第 N 项
        // int i = sc.nextInt();
        // System.out.println(recursivelyFindTheItemOfFibonacciSequence(i));
        // 递归求解汉诺塔问题
        // int i = sc.nextInt();
        // han(i, 'A', 'B', 'C');
        // 创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
        int[] arr = new int[100];
        Arrays.setAll(arr, i -> i + 1);
        // System.out.println(Arrays.toString(arr));
        // 实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
        printArray(arr);

    }

    private static void printArray(int[] arr) {
        //模拟了Arrays.toString()
        if (arr == null) {
            return;
        }
        int iMax = arr.length - 1;
        if (iMax == -1) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0;; i++) {
            sb.append(arr[i]);
            if (iMax == i) {
                System.out.println(sb.append("]").toString());
                return;
            }
            sb.append(",");
        }

    }

    private static void han(int i, char pos1, char pos2, char pos3) {
        if (i == 1) {
            move(pos1, pos2);
            return;
        }
        han(i - 1, pos1, pos3, pos2);
        move(pos1, pos3);
        han(i - 1, pos2, pos1, pos3);
    }

    private static void move(char pos1, char pos2) {
        System.out.print(pos1 + "->" + pos2 + " ");
    }

    private static int recursivelyFindTheItemOfFibonacciSequence(int i) {
        // 迭代
        // int flag1=1;
        // int flag2=1;
        // int flag3=1;
        // while(i>=3){
        // flag3=flag1+flag2;
        // flag1=flag2;
        // flag2=flag3;
        // i--;
        // }
        // return flag3;
        // 递归
        if (i <= 2) {
            return 1;
        } else {
            return recursivelyFindTheItemOfFibonacciSequence(i - 1) + recursivelyFindTheItemOfFibonacciSequence(i - 2);
        }
    }

    private static int sumOfConstituentNumbers(int i) {
        if (i <= 9) {
            return i;
        } else {
            return i % 10 + sumOfConstituentNumbers(i / 10);
        }
    }

    private static void printEveryBit(int i) {
        if (i <= 9) {
            System.out.print(i + " ");
        } else {
            printEveryBit(i / 10);
            System.out.print(i % 10 + " ");
        }
    }

    private static int sum(int i) {
        if (i == 1) {
            return 1;
        } else {
            return sum(i - 1) + i;
        }
    }

    private static int factorial(int i) {
        if (i == 1) {
            return 1;
        } else {
            return factorial(i - 1) * i;
        }
    }

}
